#include "mainwindow.h"
#include"SaveProjectDialog.h"

#include<QStatusBar>
#include<QLabel>
#include<QToolBar>
#include<QMenuBar>
#include<QPushButton>
#include<QTextEdit>
#include<QDockWidget>
#include<QDialogButtonBox>
#include<QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    setCentral();
    setMenuBar();
    setToolBar();
    setDockWidget();
    setStatusBar();
}

MainWindow::~MainWindow()
{
}

void MainWindow::setCentral()
{
    // 1. 创建中央部件 - 这里用一个 QTextEdit 示例
    QTextEdit *centralTextEdit = new QTextEdit();
    centralTextEdit->setText("Hello, this is the central widget!");

    // 2. 将中央部件设置给 QMainWindow
    this->setCentralWidget(centralTextEdit);

    // 设置窗口标题和大小并显示
    this->setWindowTitle("QMainWindow Class");
    this->resize(800, 600);

    //4 设置状态提示（状态栏显示）
    QPushButton *btn4 = new QPushButton(centralTextEdit);
    btn4->setText("btn4");
    btn4->setStatusTip("Performs the main action");

}

void MainWindow::setMenuBar()
{
    // 获取主窗口的菜单栏（如果不存在，menuBar() 会自动创建一个）
    QMenuBar *menuBar = this->menuBar();

    // 创建“文件”菜单
    QMenu *fileMenu = menuBar->addMenu("&File"); // & 表示快捷键 Alt+F

    // 向“文件”菜单中添加动作（菜单项）
    newAction = new QAction("&New", this);
    openAction = new QAction("&Open", this);
    exitAction = new QAction("E&xit", this);

    fileMenu->addAction(newAction);
    fileMenu->addAction(openAction);
    fileMenu->addSeparator(); // 添加一个分隔线
    fileMenu->addAction(exitAction);

    // 连接动作的信号（例如 triggered）到槽函数
    connect(exitAction, &QAction::triggered, this, &MainWindow::slot_saveProject);
}

void MainWindow::setToolBar()
{
    // 创建一个工具栏
    QToolBar *toolBar = this->addToolBar("Main Toolbar");

    // 向工具栏中添加动作（可以是之前为菜单创建的动作，也可以是新的）
    toolBar->addAction(newAction);
    toolBar->addAction(openAction);

    // 你也可以添加其他控件，例如一个按钮
    QPushButton *aButton = new QPushButton("Click Me!", this);
    toolBar->addWidget(aButton);

    // 设置工具栏是否可移动、可浮动
    toolBar->setMovable(true); // 默认就是 true
    toolBar->setFloatable(true);
}

void MainWindow::setDockWidget()
{
    //1.建立停靠窗子
    QDockWidget *Dockidget_Tool =new QDockWidget("Tool Dockwidget",this);
    Dockidget_Tool->setFixedSize(200,600);

    //2.给停靠窗加入内容
    QTextEdit *tool_TextEdit = new QTextEdit();
    tool_TextEdit->setText("this is the tool widget!");
    Dockidget_Tool->setWidget(tool_TextEdit);

    //3.将停靠窗停靠到主窗
    this->addDockWidget(Qt::RightDockWidgetArea,Dockidget_Tool);
}

void MainWindow::setStatusBar()
{
    // 获取主窗口的状态栏（如果不存在，statusBar() 会自动创建一个）
    QStatusBar *statusBar = this->statusBar();

    // 显示一条临时消息（持续一段时间，单位毫秒）
    statusBar->showMessage("Application started successfully.", 3000);

    // 或者添加一个永久性的部件（始终显示在右侧）
    QLabel *permanentLabel = new QLabel("Ready");
    statusBar->addPermanentWidget(permanentLabel);
}

void MainWindow::slot_saveProject()
{
    SaveProjectDialog dialog(this);
    unsigned int flag= dialog.exec();
    if(QDialogButtonBox::Save==flag)
    {
        qDebug()<<"save project,and close";
        this->close();
    }
    else if (QDialogButtonBox::No==flag)
    {
        qDebug()<<"do not save project,and close";
        this->close();
    }
}

